package es.udc.acs.cajero.operations;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import es.udc.acs.database.Database;
import es.udc.acs.database.exception.ConexionInvalidaException;

public class DBCajeroOperations {

	
	/**
	 * inserta un log en la tabla de logs
	 */
	public static void insertarLog(String idCajero,
                                   String mensaje) 
                                   throws SQLException, 
                                          ConexionInvalidaException {
		
		Connection conexion = Database.getInstancia().getConexion();

		int nlog = obtenerNLog(idCajero);
		
		String sentencia = 
	    "INSERT INTO cj_log "+
	    "VALUES ('"+idCajero+"',"+nlog+",'"+mensaje+"',"
	    		+"(SELECT sysdate FROM dual))";

		if (conexion != null) {
			
			Statement stmt = conexion.createStatement();
			stmt.executeUpdate(sentencia);			
			stmt.close();			
		} else 
			throw new ConexionInvalidaException();
	}
	
	/**
	 * Obtiene el numero del ultimo log de esa cuenta
	 */
	private static int obtenerNLog(String idCajero) 
                                   throws SQLException {
		
		// obtenemos el número del último log guardado
        String obtenerNlog = "SELECT max(id_clog) " +
        	                 "FROM cj_log " +
        	                 "WHERE id_cajero = '"+idCajero+"' ";
        
		Connection conexion = Database.getInstancia().getConexion();
		int nlog = 0;
		
		if (conexion != null) {
			
			Statement stmt   = conexion.createStatement();
	        ResultSet result = stmt.executeQuery(obtenerNlog);	
	        // si hubo alguno antes
	        try {
		        result.next();	        
		        nlog = result.getInt(1)+1;     	        
	        } catch (Exception e) {}
	        
	        stmt.close();        
		}
		
		return nlog;
	}

	public static void eliminarLogs(String idCajero) throws SQLException {
		
		Connection conexion = Database.getInstancia().getConexion();

		if (conexion != null) {
			PreparedStatement ps = conexion.prepareStatement(
					"DELETE FROM cj_log WHERE id_cajero = ?");
			ps.setString(1, idCajero);
			ps.execute();
		}
		
	}
}
